// 给出由小写字母组成的字符串 S，重复项删除操作会选择两个相邻且相同的字母，并删除它们。
// 在 S 上反复执行重复项删除操作，直到无法继续删除。
// 在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。

const removeDuplicates = function (S: string): string {
    const stack: string[] = [];// 栈
    for (let i = 0; i < S.length; i++) {
        // 如果当前字符与栈顶字符相等，可能触发重复出栈
        while (stack.length > 0 && stack[stack.length - 1] === S[i]) {
            stack.pop();// 出栈字符
            i++;// 指针同时记得往右更新
        }
        stack.push(S[i]);
    }
    return stack.join("");
};


// 难度比较小的一道题目，理解了题意之后
// 基本上只要想到扫描的同时判断重复字符的操作顺序是和栈非常相似的就没有很大难度了